JAMES WEB
Aprenda como se faz.
Produtos CRUD (Deletar)
Este capítulo explora o processo de exclusão de produtos em nosso sistema de e-commerce. Ao clicar em “Excluir”, o sistema ativa a rota /admin/products_delete/:idproduct, no arquivo admin-products.php. Esta rota, via método GET, recebe o ID do produto, verifica a autenticação do usuário e, através da função delete() no arquivo Products.php, remove o produto do banco de dados. A função delete() usa SQL para deletar o produto, prevenindo injeções de SQL. Este capítulo detalha cada etapa, desde a rota até a exclusão no banco de dados, garantindo a integridade do sistema.

Deletando um produto
O processo de deletar um produto é muito simples. Ele é acionado quendo clicamos no botão ‘Excluir’ em uma linha de um produto na página lista de produtos na página administrativa. Ele nos leva a rota ‘/admin/products_delete/:idproduct’ inserido no código admin.products.php.
PHP: admin-products.php (rota ‘/admin/products_delete/:idproduct’)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php /// início do código //Rota Excluir Produtos- Template products-update.html $app ->get( '/admin/products_delete/:idproduct' , function ( $idproduct ) { User::verifyLogin(); $product = new Product(); $product ->get((int) $idproduct ); $product -> delete (); header( "Location: /ecommerce/admin/products" ); exit ; }); // restodo código ?> |
Em suma, este trecho de código define uma rota que recebe o ID de um produto via GET, verifica a autenticação do usuário, recupera os dados do produto do banco de dados, remove o produto do banco de dados e redireciona o usuário para a lista de produtos.
Veja a explicação linha por linha:
- L4: $app->get(‘/admin/products_delete/:idproduct’, function($idproduct) {
Esta linha inicia a definição de uma rota no aplicativo web.- $app->get(): indica que esta rota responde a requisições HTTP do tipo GET. Este tipo de requisição é comumente usado para solicitar dados do servidor.
- ‘/admin/products_delete/:idproduct’: define o caminho da rota. :idproduct é um parâmetro dinâmico, ou seja, pode variar dependendo do ID do produto que está sendo processado.
- function($idproduct) {: inicia uma função anônima que será executada quando a rota for acessada. $idproduct é o parâmetro que recebe o valor dinâmico do ID do produto.
- L5: User::verifyLogin();
Esta linha chama um método estático verifyLogin() da classe User. Este método tem a responsabilidade de verificar se o usuário está autenticado e tem permissão para acessar esta rota. Trata-se de uma medida de segurança essencial para proteger áreas administrativas do sistema. - L6: $product = new Product();
Aqui, um novo objeto da classe Product é instanciado. A classe Product representa um produto no sistema e contém os atributos e métodos necessários para manipular os dados do produto. - L7: $product->get((int)$idproduct);
Este trecho chama o método get() do objeto $product, passando o $idproduct como argumento. O (int) garante que o $idproduct seja convertido para um número inteiro, prevenindo erros. O método get() recupera os dados do produto correspondente ao $idproduct do banco de dados e os armazena no objeto $product. - L8: $product->delete();
Este trecho invoca o método delete() do objeto $product. delete() remove o produto correspondente do banco de dados. - L9: header(“Location: /ecommerce/admin/products”);
Esta linha redireciona o usuário para a página /ecommerce/admin/products. Após a exclusão do produto, o usuário é redirecionado para a lista de produtos. - L10: exit;
A função exit encerra a execução do script. Esta linha garante que nenhum código adicional seja executado após o redirecionamento.
Função delete()
Na linha 8 do arquivo admin-produtcs.php da rota ‘/admin/products_delete/:idproduct’ temos a cham,ada da função delete(). Ela deve ser reproduzida no arquivo Products.php conforme exemplificado abaixo:
PHP: Products.php (Funçao delete())
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php /// início do código public function delete () { $sql = new Sql(); $sql ->query( "DELETE FROM tb_products WHERE idproduct = :idproduct" , [ ':idproduct' => $this ->getidproduct() ]); } // restodo código ?> |
A função delete() cria uma instância da classe Sql para interagir com o banco de dados. Em seguida, ela executa uma consulta SQL DELETE para remover um produto da tabela tb_products, usando o ID do produto obtido através do método getidproduct() para identificar o registro a ser removido. A consulta utiliza um marcador de parâmetro para evitar ataques de injeção de SQL.
Veja como ela funciona linha por linha:
- L4: public function delete() Esta linha define uma função pública chamada delete() dentro da classe Product. Esta função é responsável por remover um produto do banco de dados.
- L5: { Início do bloco de código da função.
- L5: $sql = new Sql(); Esta linha instancia um novo objeto da classe Sql. Assumimos que a classe Sql é responsável por interagir com o banco de dados.
- L6-L9: $sql->query(“DELETE FROM tb_products WHERE idproduct = :idproduct”, [ ‘:idproduct’ => $this->getidproduct() ]);
Esta linha executa uma consulta SQL para remover um registro da tabela tb_products.
- $sql->query(): é um método da classe Sql que executa uma consulta SQL.
- “DELETE FROM tb_products WHERE idproduct = :idproduct” :é a consulta SQL que será executada.
- DELETE FROM tb_products: :Indica que registros serão removidos da tabela tb_products.
- WHERE idproduct = :idproduct:: Especifica a condição para a remoção. Apenas o registro onde a coluna idproduct corresponde ao valor :idproduct será removido.
- :idproduct:: É um marcador de parâmetro, usado para prevenir injeção de SQL.
- [ ‘:idproduct’ => $this->getidproduct() ]: é um array associativo que fornece o valor para o marcador de parâmetro :idproduct.
- ‘:idproduct’: :A chave do array corresponde ao marcador de parâmetro na consulta SQL.
- $this->getidproduct(): :O valor do array é obtido chamando o método getidproduct() do objeto atual ($this). Assumimos que este método retorna o ID do produto que será removido.
- L8: }
Fim do bloco de código da função.
Para Saber Mais…
- getidproduct()
- verifyLogin()
- get((int)$idproduct)